using System;
using System.Data;
using System.Data.SqlClient;
using SystemFrameworks;
using DataAccess;
using Microsoft.ApplicationBlocks.Data;
using Common;
using MinCultura.Sipa.DataAccess.EntidadesArtes;



namespace BusinessRules
{
	/// <summary>
	/// Summary description for eNTIDADES.
	/// </summary>
	public class EntidadesFPA 
	{

		#region Private Data Access Atributes

		//Agentes en SIPA
		private const string ENT_ID_PARAM = "@ENT_ID";
		private const string USU_ID_PARAM = "@USU_ID";
		private const string ENT_ORIGEN_PARAM = "@ENT_ORIGEN";
		private const string ENT_NOMBRE_PARAM = "@ENT_NOMBRE";
		private const string ENT_NIT_PARAM = "@ENT_NIT";
		private const string ZOP_ID_PARAM = "@ZOP_ID";
		private const string ZON_ID_DEPTO_PARAM = "@ZON_ID_DEPTO";
		private const string ZON_ID_MUNICIPIO_PARAM = "@ZON_ID_MUNICIPIO";
		private const string TEA_ID_PARAM = "@TEA_ID";
		private const string ENT_ESTADO_PARAM = "@ENT_ESTADO";
		private const string ENT_AREA_ARTISTICA_PARAM = "@ENT_AREA_ARTISTICA";
		private const string FECHA_INICIAL_PARAM = "@FECHA_INICIAL";
		private const string FEHA_FINAL_PARAM = "@FECHA_FINAL";
        private const string ARD_ID_PARAM = "@ARD_ID";


		#endregion Private Data Access Atributes

        public EntidadesFPA(string strCadenaConecxion)
        {
            CadenaConexion = strCadenaConecxion;
        }

        private string _CadenaConexion;

        public string CadenaConexion
        {
            get { return _CadenaConexion; }
            set { _CadenaConexion = value; }
        }

        public void Adicionar(EntidadesFPAData dtEntidadesFPA, params SqlTransaction[] transaccion)
        {
            foreach (DataRow row in dtEntidadesFPA.Rows)
            {
                SqlParameter param1 = new SqlParameter(ENT_ID_PARAM, row[EntidadesFPAData.ENT_ID_FIELD]);
                SqlParameter param2 = new SqlParameter(USU_ID_PARAM, row[EntidadesFPAData.USU_ID_FIELD]);
                SqlParameter param3 = new SqlParameter(ENT_ORIGEN_PARAM, row[EntidadesFPAData.ENT_ORIGEN_FIELD]);

                SqlParameter[] parameters = { param1, param2, param3 };

                try
                {
                    if (transaccion.Length > 0)
                        SqlHelper.ExecuteNonQuery(transaccion[0], CommandType.StoredProcedure, "PAS_ADICIONAR_FPA_ENTIDADES_ARTES", parameters);
                    else
                        SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure, "PAS_ADICIONAR_FPA_ENTIDADES_ARTES", parameters);
                }
                catch (SqlException sqlEx)
                {
                    throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ADICIONAR_FPA_ENTIDADES_ARTES"), sqlEx);
                }
                catch (Exception ex)
                {
                    throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", this.GetType().FullName + ex.Message), ex);
                }
            }
        }

		public void Eliminar(decimal IdEntidad)
		{					
			SqlParameter param1 = new SqlParameter(ENT_ID_PARAM, IdEntidad);
			SqlParameter[] parameters = {param1};			
			try
			{
                SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure, "PAS_ELIMINAR_FPA_ENTIDADES_ARTES", parameters);							
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ELIMINAR_FPA_ENTIDADES_ARTES"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", this.GetType().FullName + ex.Message), ex);
			}					
		}

        //public EntidadesFPAData Consultar(decimal idUsuario, decimal idEntidad)
        //{
        //    EntidadesFPAData response = new EntidadesFPAData();

        //    SqlParameter param1 = new SqlParameter(USU_ID_PARAM, idUsuario);
        //    if (idUsuario == 0)
        //        param1.Value = DBNull.Value;
	
        //    SqlParameter param2 = new SqlParameter(ENT_ID_PARAM, idEntidad);
        //    if (idEntidad == 0)
        //        param2.Value = DBNull.Value;

        //    SqlParameter[] parameters = {param1, param2};

        //    try
        //    {
        //        SqlHelper.ExecuteDataTable(this.CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_FPA_ENTIDADES_ARTES", response, parameters);			
        //    }
        //    catch (SqlException sqlEx)
        //    {
        //        throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_CONSULTAR_FPA_ENTIDADES_ARTES"), sqlEx);
        //    }
        //    catch (Exception ex)
        //    {
        //        throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorConsultar", this.GetType().FullName + ex.Message), ex);
        //    }

        //    return response;		
        //}

        //public bool EntidadExiste(decimal idEntidad)
        //{
        //    EntidadesFPAData entidadesFPAData = Consultar(0,idEntidad);
        //    if (entidadesFPAData.Rows.Count > 0)
        //        return true;
        //    else
        //        return false;			
        //}

        //public int ObtenerIdUsrPropietario(decimal idEntidad)
        //{
        //    EntidadesFPAData entidadesFPAData = Consultar(0,idEntidad);
        //    if (entidadesFPAData.Rows.Count > 0)
        //    {
        //        return Convert.ToInt32(entidadesFPAData.Rows[0][EntidadesFPAData.USU_ID_FIELD]);
        //    }
        //    else
        //        return 0;			
        //}

		public EntidadesArtesData BuscarPrivado(decimal idUsuario, string nombreEntidad, string nitEntidad, string atrArdId)
		{EntidadesArtesData response = new EntidadesArtesData();

		    SqlParameter param1 = new SqlParameter(USU_ID_PARAM, idUsuario);
            if (idUsuario == 0)
		        param1.Value = System.DBNull.Value;
		    SqlParameter param2 = new SqlParameter(ENT_NOMBRE_PARAM, nombreEntidad);
		    SqlParameter param3 = new SqlParameter(ENT_NIT_PARAM, nitEntidad);
		    SqlParameter param4 = new SqlParameter(ARD_ID_PARAM, atrArdId);
		    
		

	    SqlParameter[] parameters = {param1, param2, param3, param4};
            try
			{
                SqlHelper.ExecuteDataTable(this.CadenaConexion, CommandType.StoredProcedure, "PAS_BUSCAR_FPA_ENTIDADES_ARTES_TEATRO", response, parameters);			
			}
			catch (SqlException sqlEx)
			{
                throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_BUSCAR_FPA_ENTIDADES_ARTES_TEATRO"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorConsultar", this.GetType().FullName + ex.Message), ex);
			}
			return response;		
		}

		public EntidadesArtesData BuscarAleatorio()
		{
			EntidadesArtesData response = new EntidadesArtesData();

			try
			{
                SqlHelper.ExecuteDataTable(this.CadenaConexion, CommandType.StoredProcedure, "PAS_BUSCAR_FPA_ENTIDADES_ARTES_ALEATORIO", response);			
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_BUSCAR_FPA_ENTIDADES_ARTES_ALEATORIO"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorConsultar", this.GetType().FullName + ex.Message), ex);
			}
			return response;		
		}

		public EntidadesArtesData BuscarPublico(decimal decIdAreaArtistica,int idPais,string idDepto, 
			string idMunicipio,decimal idTipoEntidad,string nombreEntidad,string nombreTeatroAuditorio)
		{
			EntidadesArtesData response = new EntidadesArtesData();

			SqlParameter param1 = new SqlParameter(ENT_AREA_ARTISTICA_PARAM, decIdAreaArtistica);
			if (decIdAreaArtistica == 0)
				param1.Value = DBNull.Value;

			SqlParameter param2 = new SqlParameter(ZOP_ID_PARAM, idPais);
			if (idPais == 0)
				param2.Value = DBNull.Value;

			SqlParameter param3 = new SqlParameter(ZON_ID_DEPTO_PARAM, idDepto);
			if (idDepto.Length == 0)
				param3.Value = DBNull.Value;

			SqlParameter param4 = new SqlParameter(ZON_ID_MUNICIPIO_PARAM, idMunicipio);
			if (idMunicipio.Length == 0)
				param4.Value = DBNull.Value;

			SqlParameter param5 = new SqlParameter(TEA_ID_PARAM, idTipoEntidad);
			if (idTipoEntidad == 0)
				param5.Value = DBNull.Value;

			SqlParameter param6 = new SqlParameter(ENT_NOMBRE_PARAM, nombreEntidad);
			if (nombreEntidad.Length == 0)
				param6.Value = DBNull.Value;

			// PARA EL PUBLICO SOLO MUESTRA LOS QUE SE ENCUENTRAN EN EATADO "PUBLICADO"
			SqlParameter param7 = new SqlParameter(ENT_ESTADO_PARAM, EnumHelper.GetDescription(Utilidad.Estados.Publicado));

			SqlParameter param8 = new SqlParameter("@INF_NOMBRE", nombreTeatroAuditorio);
			if (nombreTeatroAuditorio.Length == 0)
				param8.Value = DBNull.Value;


			SqlParameter[] parameters = {param1, param2, param3, param4, param5, param6, param7, param8};

			try
			{
                SqlHelper.ExecuteDataTable(this.CadenaConexion, CommandType.StoredProcedure, "PAS_BUSCAR_FPA_ENTIDADES_ARTES_PUBLICO", response, parameters);			
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_BUSCAR_FPA_ENTIDADES_ARTES_PUBLICO"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorConsultar", this.GetType().FullName + ex.Message), ex);
			}
			return response;		
		}

		
		public EntidadesArtesData BuscarPublicoFiltro(decimal decIdAreaArtistica,int idPais,string idDepto, 
			string idMunicipio,decimal idTipoEntidad,string nombreEntidad,string nombreTeatroAuditorio)
		{
			EntidadesArtesData response = new EntidadesArtesData();

			SqlParameter param1 = new SqlParameter(ENT_AREA_ARTISTICA_PARAM, decIdAreaArtistica);
			if (decIdAreaArtistica == 0)
				param1.Value = DBNull.Value;

			SqlParameter param2 = new SqlParameter(ZOP_ID_PARAM, idPais);
			if (idPais == 0)
				param2.Value = DBNull.Value;

			SqlParameter param3 = new SqlParameter(ZON_ID_DEPTO_PARAM, idDepto);
			if (idDepto.Length == 0)
				param3.Value = DBNull.Value;

			SqlParameter param4 = new SqlParameter(ZON_ID_MUNICIPIO_PARAM, idMunicipio);
			if (idMunicipio.Length == 0)
				param4.Value = DBNull.Value;

			SqlParameter param5 = new SqlParameter(TEA_ID_PARAM, idTipoEntidad);
			if (idTipoEntidad == 0)
				param5.Value = DBNull.Value;

			SqlParameter param6 = new SqlParameter(ENT_NOMBRE_PARAM, nombreEntidad);
			if (nombreEntidad.Length == 0)
				param6.Value = DBNull.Value;

			// PARA EL PUBLICO SOLO MUESTRA LOS QUE SE ENCUENTRAN EN EATADO "PUBLICADO"
			SqlParameter param7 = new SqlParameter(ENT_ESTADO_PARAM, EnumHelper.GetDescription(Utilidad.Estados.Publicado));

			SqlParameter param8 = new SqlParameter("@INF_NOMBRE", nombreTeatroAuditorio);
			if (nombreTeatroAuditorio.Length == 0)
				param8.Value = DBNull.Value;


			SqlParameter[] parameters = {param1, param2, param3, param4, param5, param6, param7, param8};

			try
			{
                SqlHelper.ExecuteDataTable(this.CadenaConexion, CommandType.StoredProcedure, "PAS_BUSCAR_FPA_ENTIDADES_ARTES_PUBLICO_FILTRO", response, parameters);			
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_BUSCAR_FPA_ENTIDADES_ARTES_PUBLICO_FILTRO"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorConsultar", this.GetType().FullName + ex.Message), ex);
			}
			return response;		
		}
	
	
		public DataTable BuscarPublicoBoletin (DateTime FechaInicial, DateTime FechaFinal, decimal EntidadAreaSIPA)
		{
			DataTable dtDirectorioSIPA = new DataTable();
			SqlParameter param1 = new SqlParameter(FECHA_INICIAL_PARAM, FechaInicial);
			SqlParameter param2 = new SqlParameter(FEHA_FINAL_PARAM, FechaFinal);
			SqlParameter param3 = new SqlParameter(ENT_ESTADO_PARAM, EnumHelper.GetDescription(Utilidad.Estados.Publicado));
			SqlParameter param4 = new SqlParameter(ENT_AREA_ARTISTICA_PARAM, EntidadAreaSIPA) ;

			SqlParameter[] parameters = {param1, param2, param3, param4};
			try
			{
                SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_BUSCAR_ART_ENTIDADES_ARTES_BOLETIN", dtDirectorioSIPA, parameters);
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_BUSCAR_ART_ENTIDADES_ARTES_BOLETIN"), sqlEx);
			}
			return dtDirectorioSIPA;
		}
		public EntidadesArtesData BuscarSolicitud(string idDepto, string idMunicipio, string nombreEntidad, string nitEntidad, decimal idTipoEntidad)
		{
			EntidadesArtesData response = new EntidadesArtesData();

			SqlParameter param1 = new SqlParameter(ZON_ID_DEPTO_PARAM, idDepto);
			if (idDepto.Length == 0)
				param1.Value = DBNull.Value;

			SqlParameter param2 = new SqlParameter(ZON_ID_MUNICIPIO_PARAM, idMunicipio);
			if (idMunicipio.Length == 0)
				param2.Value = DBNull.Value;

			SqlParameter param3 = new SqlParameter(ENT_NOMBRE_PARAM, nombreEntidad);
			if (nombreEntidad.Length == 0)
				param3.Value = DBNull.Value;

			SqlParameter param4 = new SqlParameter(ENT_NIT_PARAM, nitEntidad);
			if (nitEntidad.Length == 0)
				param4.Value = DBNull.Value;

			SqlParameter param5 = new SqlParameter(TEA_ID_PARAM, idTipoEntidad);
			if (idTipoEntidad == 0)
				param5.Value = DBNull.Value;

			SqlParameter[] parameters = {param1, param2, param3, param4, param5};

			try
			{
                SqlHelper.ExecuteDataTable(this.CadenaConexion, CommandType.StoredProcedure, "PAS_BUSCAR_FPA_ENTIDADES_ARTES_SOLICITUD", response, parameters);			
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_BUSCAR_FPA_ENTIDADES_ARTES_SOLICITUD"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorConsultar", this.GetType().FullName + ex.Message), ex);
			}
			return response;		
		}	

        //public DataRow[] EntidadesInfIncompleta(decimal IdUsuario)
        //{			
        //    DataTable dtResul = new DataTable();						
        //    EntidadesArtes objEntidad = new EntidadesArtes();
        //    try
        //    {
        //        dtResul= objEntidad.ConsultarEntidadesInfIncompletaFPA(IdUsuario);
        //    }
        //    catch(Exception ex)
        //    {
        //        throw new ApplicationExceptionManager(ex.Message,ex);
        //    }
        //    DataRow[] drFilas = new DataRow[dtResul.Rows.Count];

        //    #region - Por Revisar : Extraer los resultados del DataTable

        //    if (dtResul.Rows.Count>0)
        //    {				
        //        int i=0;
        //        foreach(DataRow row in dtResul.Rows)
        //        {
        //            drFilas.SetValue(row,i);
        //            i++;
        //        }
        //    }				

        //    #endregion
        //    return drFilas;
        //}


		public int BuscarSolicitudEntidad(string nombreEntidad, string nitEntidad, decimal idTipoEntidad, string nombreEncargado)
		{
			int response = 0;

			SqlParameter param1 = new SqlParameter(ENT_NOMBRE_PARAM, nombreEntidad);
			

			SqlParameter param2 = new SqlParameter(ENT_NIT_PARAM, nitEntidad);
			if (nitEntidad.Length == 0)
				param2.Value = DBNull.Value;

			SqlParameter param3 = new SqlParameter(TEA_ID_PARAM, idTipoEntidad);

			SqlParameter param4= new SqlParameter("@ENT_NOMBRE_REPRESENTANTE_LEGAL",nombreEncargado);
			

			SqlParameter[] parameters = {param1, param2, param3, param4};

			try
			{
                response = Convert.ToInt32(SqlHelper.ExecuteScalar(this.CadenaConexion, CommandType.StoredProcedure, "PAS_BUSCAR_ENTIDAD_EXISTE", parameters));			
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_BUSCAR_ENTIDAD_EXISTE"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorConsultar", this.GetType().FullName + ex.Message), ex);
			}
			if(response<0)
				response=0;
			return response;		
		}	


	}
}
